﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Modelo_ETdA.Negocio.Analise;
using Modelo_ETdA.Negocio.Analise.Formato;
using Modelo_ETdA.Negocio.Analise.Avaliacao;

namespace Modelo_ETdA.Interface
{
    public partial class VerAvaliacaoCliente : Form
    {
        private MenuAnaliseETdA menuAetda;
        private GestorAnalise gAnalise;
        private FormatoAvaliacaoCliente form_cli;
        private DataTable tabela;
        private List<Avaliacao> l_quest;
        private Dictionary<int, Habilitacao> dicHabil;
        private int contador;
        private Boolean first;

        public VerAvaliacaoCliente(GestorAnalise gestor, int codAval, MenuAnaliseETdA metda)
        {
            InitializeComponent();
            this.gAnalise = gestor;
            this.l_quest = gestor.consultaAvaliacao(codAval, 1);
            this.menuAetda = metda;
            this.dicHabil = new Dictionary<int, Habilitacao>();
            this.form_cli = (FormatoAvaliacaoCliente)gestor.consultaFormatoAvaliacao(l_quest[0].CodForm, 1, gestor.AmbComercialSessao.Cabeçalho.Cod);
            foreach (Habilitacao hab in gestor.getListHabilitacaoLiteraria())
            {
                this.dicHabil.Add(hab.Cod, hab);
            }
            this.contador = 0;
            this.first = true;
            this.nquestionarios.Text = l_quest.Count + "";

            nomeForm.Text = form_cli.Nome;
            nomeAval.Text = l_quest[0].Doc_cabecalho.Nome;
            actualiza();
        }

        private void actualiza()
        {
            Questionario quest = (Questionario)l_quest[contador];
            Dictionary<int, Resposta> dicResp = new Dictionary<int, Resposta>();
            foreach (Resposta resp in quest.Respostas)
            {
                dicResp.Add(resp.CodQuestao, resp);
            }
            idade.Text = quest.Idade + "";
            if (quest.Genero)
                genero.Text = "Masculino";
            else genero.Text = "Feminino";
            if (quest.Cliente)
                cliente.Text = "Sim";
            else cliente.Text = "Não";
            habilitacoes.Text = dicHabil[quest.CodHabilitacao].descricao;

            tabela = new DataTable();
            tabela.Columns.Add("Código");
            tabela.Columns.Add("Questão");
            tabela.Columns.Add("Resposta");
            tabela.Columns.Add("Min. Escala");
            tabela.Columns.Add("Max. Escala");

            List<Resposta> lRest = quest.Respostas;
            foreach (QuestaoCliente questAo in form_cli.ListQuestaoCliente)
            {
                DataRow row = tabela.NewRow();
                row["Código"] = questAo.CodBD;
                row["Questão"] = questAo.Alcunha;
                row["Resposta"] = dicResp[questAo.CodBD].ValorResposta;
                row["Min. Escala"] = questAo.MinResposta;
                row["Max. Escala"] = questAo.EscalaMax;
                tabela.Rows.Add(row);
            }

            lquestoes.DataSource = tabela;
            if (first)
            {
                lquestoes.Columns[0].Visible = false;
                lquestoes.Columns[0].ReadOnly = true;
                lquestoes.Columns[1].ReadOnly = true;
                lquestoes.Columns[2].ReadOnly = true;
                lquestoes.Columns[3].ReadOnly = true;
                lquestoes.Columns[4].ReadOnly = true;
                lquestoes.Columns[1].Width += 70;
                lquestoes.Columns[2].Width += 18;
                lquestoes.Columns[3].Width -= 13;
                lquestoes.Columns[4].Width -= 13;
                first = false;
            }

            contador++;
            if (contador >= l_quest.Count) novoQuestionario.Visible = false;
            else novoQuestionario.Visible = true;

        }


        private void novoQuestionario_Click(object sender, EventArgs e)
        {
            try{
            actualiza();
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro na consulta da avaliação.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void VerAvaliacaoCliente_FormClosed(object sender, FormClosedEventArgs e)
        {
            menuAetda.sair();
        }

        private void voltar_Click(object sender, EventArgs e)
        {
            menuAetda.Visible = true;
            this.Visible = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try{
            if (contador > 1)
            {
                contador -= 2;
                actualiza();
            }
            else
                MessageBox.Show("Não existem avaliação anteriores!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao consultar avaliações anteriores!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            }

    }
}
